<?php

namespace App\Http\Controllers;

use App\Visit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;

class VisitController extends Controller
{
    /**
     * 登录校验
     * @param Request $request
     * @return array
     */
    public function isVisit(Request $request)
    {
        $ret = [
            'is_account' => 0,
            'is_password' => 0
        ];

        // 账号、密码不为空
        if ($request->has(['account', 'password'])) {
            $account = $request->input('account');
            $password = $request->input('password');
            $visit = Visit::where('vi_account', $account)->first();
            // 账号存在
            if ($visit) {
                $ret['is_account'] = 1;
                // 密码匹配
                if (Hash::check($password, $visit->vi_password)) {
                    $infoStr = '名称：'.$visit->vi_name.'，账号：'.$account.'。账号密码匹配，尝试登录。';

                    $ret['is_password'] = 1;
                    $ret['name'] = $visit->vi_name;
                    $ret['date_login'] =  $visit->vi_date_login;
                    // 计算剩余有限时间
                    $ret['duration'] = self::spareValidDate($visit->vi_date_login, $visit->vi_date_valid);

                    // 如果从未登陆过
                    if (!$visit->vi_date_login) {
                        // 登录时间记录
                        $visit->vi_date_login = date('Y-m-d H:i:s');
                        $infoStr .= '第一次登录。';
                    }
                    $visit->save();

                    // 写入log
                    if ($ret['duration'] < 0) {
                        $infoStr .= '已过有效期，拒绝访问。';
                    } else {
                        $infoStr .= '登录成功。';
                    }
                    Log::channel('login')->info($infoStr);
                }
            }
            return OK($ret);
        }

        return ERROR($ret);
    }

    /**
     * 计算出剩余的有效时间
     * @param $date_login
     * @param $date_valid
     * @return int
     */
    public static function spareValidDate($date_login, $date_valid)
    {
        // 如果原本就是永久有效
        if ($date_valid === 0) {
            return 0;
        }

        // 目前是第一次登录
        if (empty($date_login)) {
            return $date_valid;
        }

        // 多次登录、剩余有效期
        $x = $date_valid - (time() - strtotime($date_login));

        // 如果是期限用户 登录时刚好为0
        return $x === 0 ? -1 : $x;
    }
}
